﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace The.Namespace2Before1ForSortingTest.I.Like
{
    public class PublicClass
    {
        internal enum InternalEnum
        {
            Element1,
            Element2
        }

        internal protected enum InternalProtectedEnum
        {
            Element1, Element2
        }

        private enum PrivateEnum
        {
            Element1,
            Element2
        }

        protected enum ProtectedEnum
        {
            Element1,
            Element2
        }

        public enum PublicEnum
        {
            Element1,
            Element2
        }

        internal string _internalfieldOfString;

        private string _privatefieldOfString;

        protected string _protectectedfieldOfString;

        protected internal string _protectedInternalfieldOfString;

        public string _publicfieldOfString;

        #region "Initialized Variables"

        private string _privateInitializedVariable = "";

        public string _publicInitializedVariable= "";

        internal string _internalInitializedVariable= "";

        protected internal string _protectedInternalInitializedVariable= "";

        protected string _protectedInitializedVariable= "";

        #endregion

        internal event EventHandler internalEventHandler;

        private event EventHandler privateEventhandler;
        
        protected event EventHandler protectedEventHandler;

        protected internal event EventHandler protectedinternaleventhandler;

        public event EventHandler PublicEventHandler;

        internal delegate void internalDelegate(object sender, EventArgs ea);

        private delegate void privateDelegate(object sender, EventArgs ea);

        protected delegate void protectedDelegate(object sender, EventArgs ea);

        protected internal delegate void protectedinternalDelegate(object sender, EventArgs ea);

        public delegate void publicDelegate(object sender, EventArgs ea);

        internal string InternalPropertyOfString { get; set; }

        private string PrivatePropertyOfString { get; set; }

        public string PropertyAOfString { get; set; }

        public string PropertyBOfString { get; set; }

        protected internal string ProtectedInteralPropertyOfString { get; set; }

        protected string ProtectedPropetryOfString { get; set; }

        public string PublicPropertyOfString { get; set; }

        public void PublicMethodOfVoid(string stringArrg1, int intArg1)
        {
            var x = somethinglocal;

        }

        internal void InternalMethod() { }

        protected internal void protectedInternalMethod() { }

        protected void ProtectedMethod() { string variableThatShouldNeverAppearInTheTreeview = "hello"; }

        private string PrivateMethodOfString() { return string.Empty; }

        private class PrivateNestedClass
        {

            private string _privatefieldOfString;
        }

    }

    public struct PublicStructure { }

    private struct PrivateStructure { }

    internal struct InternalStructure { }

    protected struct ProtectedStructure
    {
        private int _fieldOfInt;
        public delegate void MyEventHandler(object sender, EventArgs ea);
    }

    protected internal struct ProtectedInternalStructure { }

    private class PrivateClass
    {
        private string _somestringVariableHere;
    }
    protected class ProtectedClass
    {
    }
    internal class InternalClass
    {
    }
    protected internal class ProtectedInternalClass
    {
    }

}

namespace The.Namespace1After2ForSortingTest.I.Like
{
    public interface IPublicInterface
    {
        string InterfacePropertyOfString { get; set; }
        int InterfacePropertyOfInt { get; set; }
        string InterfaceMethodOfString();
    }

    public class PublicClassInNamespace2
    {
        public enum SomeEnumHere
        {
            item1, item2, item3

        }

    }
}